package com.cskaoyan.javase._2inner._5anonymous._2usecase;

/**
 * 匿名内部类的使用场景
 * 在实际开发中，匿名内部类比局部内部类语法更简洁，基本取代局部内部类的使用场景
 *
 * @since 14:36
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        A aSon = method();
        aSon.test();

        method(new BaseA() {
            @Override
            public void test() {
                System.out.println("使用抽象类的匿名内部类对象，作为方法的参数");
            }
        });

        method(new IA() {
            @Override
            public void test() {
                System.out.println("使用接口匿名内部类对象，作为方法的参数");
            }
        });
    }

    public static void method(BaseA ba) {
        ba.test();
    }

    public static void method(IA a) {
        a.test();
    }

    public static A method() {
        // return new A();
        // 返回A的子类对象
        return new A() {
            @Override
            void test() {
                System.out.println("A的匿名内部类子类对象");
            }
        };
    }
}

class A {
    void test() {
        System.out.println("ASon");
    }
}

abstract class BaseA {
    public abstract void test();
}

interface IA {
    void test();
}
